package com.hunliji.monitor.share.component.mq.rocket;

import com.hunliji.monitor.share.component.mq.rocket.constants.RocketMqConstants;

/**
 * rocket mq 消息发送器
 * @author wuchen
 */
public interface RocketMqFacade {
    /**
     * 发送消息 - 同步
     * 超时时间 {@link RocketMqConstants#DEFAULT_TIME_OUT}
     * @param topic topic
     * @param tag   tag
     * @param msg  消息内容
     */
    void send(String topic, String tag, Object msg);


    /**
     * 发送消息 - 同步
     * @param topic topic
     * @param tag   tag
     * @param msg  消息内容
     * @param timeout 发送消息的超时时间
     */
    void send(String topic, String tag, Object msg,Long timeout);

    /**
     * 发送延时消息
     * @param topic topic
     * @param tag tag
     * @param msg 消息内容
     * @param delayLevel 延时多久
     */
    void delayedSend(String topic, String tag, Object msg, RocketMqConstants.DelayLevel delayLevel);

    /**
     * 发送延时消息
     * @param topic topic
     * @param tag tag
     * @param msg 消息内容
     * @param timeout 发送消息的超时时间
     * @param delayLevel 延时多久
     */
    void delayedSend(String topic, String tag, Object msg, Long timeout, RocketMqConstants.DelayLevel delayLevel);

    /**
     * 发送顺序消息
     * 注意事项见实现类描述
     * @param topic topic
     * @param tag tag
     * @param msg 消息内容
     * @param orderKey：发送顺序消息的标识符
     */
    void orderSend(String topic, String tag, Object msg,String orderKey);


}
